⚡️ Flashbax - удобный ускоритель для reinforcement learning в JAX-экосистеме. Проект предлагает свежий взгляд на проблему с буферами воспроизведения, переосмысливая работу с данными.
Библиотека выделяется тем, что превращает буферы из пассивных хранилищ в интеллектуальные компоненты, которые можно встраивать в полностью скомпилированные JIT-функции. Удобно, что разработчики прописали оптимизированные версии для разных сценариев: от простых переходов (как в DQN) до сложных траекторий для R2D2, причём с поддержкой приоритетного семплирования.
🤖 GitHub
@machinelearning_interview
Библиотека выделяется тем, что превращает буферы из пассивных хранилищ в интеллектуальные компоненты, которые можно встраивать в полностью скомпилированные JIT-функции. Удобно, что разработчики прописали оптимизированные версии для разных сценариев: от простых переходов (как в DQN) до сложных траекторий для R2D2, причём с поддержкой приоритетного семплирования.
🤖 GitHub
@machinelearning_interview
📄 Scaling Laws for Native Multimodal Models
📌 Исследователи из Sorbonne и Apple проанализировали 457 мультимодальных моделей, чтобы понять, как масштабируются нативные мультимодальные архитектуры (NMM) — обученные с нуля, а не через “приклейку” vision-энкодеров к LLM.
🔍 Главное:
▪ Late-fusion (классика с vision encoder + LLM) ≠ обязательно лучше.
▪ Early-fusion модели, в которых всё учится совместно с нуля — обгоняют по качеству при меньшем количестве параметров, обучаются быстрее и проще в продакшене.
▪ Добавление Mixture of Experts (MoE) даёт прирост — модели учат модальность-специфичные веса, сохраняя ту же цену инференса.
▪ Scaling laws (законы масштабирования) у NMM — почти те же, что у LLM. Можно планировать бюджеты и рост моделей аналогично.
⚠️ Ограничения:
— Пока неясно, как точно это поведение переносится на downstream-задачи.
— Нужно больше экспериментов с разными пропорциями мультимодальных данных.
— Для early-fusion на высоких разрешениях нужны новые подходы к работе с токенами (контекст, пуллинг и т.д.).
📎 Вывод:
Early-fusion — не просто рабочий вариант, а оптимальный выбор для мультимодальных моделей при ограниченных ресурсах. Отказ от “склеек” делает обучение проще, быстрее и дешевле.
Читать
#ai #multimodal #scalinglaws #moe #llm #mlresearch #arxiv
📌 Исследователи из Sorbonne и Apple проанализировали 457 мультимодальных моделей, чтобы понять, как масштабируются нативные мультимодальные архитектуры (NMM) — обученные с нуля, а не через “приклейку” vision-энкодеров к LLM.
🔍 Главное:
▪ Late-fusion (классика с vision encoder + LLM) ≠ обязательно лучше.
▪ Early-fusion модели, в которых всё учится совместно с нуля — обгоняют по качеству при меньшем количестве параметров, обучаются быстрее и проще в продакшене.
▪ Добавление Mixture of Experts (MoE) даёт прирост — модели учат модальность-специфичные веса, сохраняя ту же цену инференса.
▪ Scaling laws (законы масштабирования) у NMM — почти те же, что у LLM. Можно планировать бюджеты и рост моделей аналогично.
⚠️ Ограничения:
— Пока неясно, как точно это поведение переносится на downstream-задачи.
— Нужно больше экспериментов с разными пропорциями мультимодальных данных.
— Для early-fusion на высоких разрешениях нужны новые подходы к работе с токенами (контекст, пуллинг и т.д.).
📎 Вывод:
Early-fusion — не просто рабочий вариант, а оптимальный выбор для мультимодальных моделей при ограниченных ресурсах. Отказ от “склеек” делает обучение проще, быстрее и дешевле.
Читать
#ai #multimodal #scalinglaws #moe #llm #mlresearch #arxiv
Forwarded from Machinelearning
Python уже несколько лет уверенно лидирует среди языков программирования, а теперь стал ещё ближе к железу. На GTC 2025 NVIDIA объявила о полноценной интеграции Python в свой CUDA-стек.
Это значит, что писать код для GPU можно будет напрямую на Python — без погружения в C++ или Fortran. Как подчеркнул Стивен Джонс, архитектор CUDA, цель — сделать инструмент естественным для Python-разработчиков: «Это не перевод синтаксиса C на Python. Все должно работать так, как привыкли разработчики».
Раньше CUDA требовала глубокого понимания низкоуровневых языков и это здорово ограничивало аудиторию. Сейчас, когда Python стал стандартом в ML и DS, NVIDIA открывает двери для миллионов программистов. По данным The Futurum Group, в 2023 году CUDA использовали 4 миллиона человек — теперь их число может резко вырасти.
Техническая часть такая же обширная, как и ожидания этого события профессиональным сообществом.
cuPyNumeric
— аналог NumPy
, который переносит вычисления с CPU на GPU буквально заменой импорта.Но главное — новый подход к параллельным вычислениям. Вместо ручного управления потоками, как в C++, NVIDIA предлагает модель CuTile, которая оперирует массивами, а не отдельными элементами. Это упрощает отладку и делает код читаемым, не жертвуя скоростью. По сути, разработчики получают высокоуровневую абстракцию, скрывающую сложности железа, но сохраняющую гибкость.
Пока CuTile доступен только для Python, но в планах — расширение для C++. Это часть стратегии NVIDIA по поддержке новых языков: Rust и Julia уже на походе.
Python-сообщество уже может экспериментировать — например, интегрировать CUDA-ядра в PyTorch или вызывать привычные библиотеки. Теперь даже те, кто никогда не писал на C++, смогут использовать всю мощь GPU — осталось проверить, как это скажется на скорости создания прекрасных LLM светлого будущего.
@ai_machinelearning_big_data
#AI #ML #Python #CUDA #NVIDIA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
MLечный путь: митап, коммьюнити, знания
В программе:
- подбор инфраструктуры для ML под запрос бизнеса,
- деплой инференса в рентген-вагоне,
- развертывание Edge-AI в буквально (!) полевых условиях.
А ещё — активное участие вместо пассивного слушания: питчи, нетворкинг и мерч за лучшие идеи.
23 апреля в 18:00 приходите в офис Selectel в Санкт-Петербурге и подключайтесь онлайн.
Регистрация и детали по ссылке: https://slc.tl/tgb6o
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwdfLKT
В программе:
- подбор инфраструктуры для ML под запрос бизнеса,
- деплой инференса в рентген-вагоне,
- развертывание Edge-AI в буквально (!) полевых условиях.
А ещё — активное участие вместо пассивного слушания: питчи, нетворкинг и мерч за лучшие идеи.
23 апреля в 18:00 приходите в офис Selectel в Санкт-Петербурге и подключайтесь онлайн.
Регистрация и детали по ссылке: https://slc.tl/tgb6o
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwdfLKT
🎲 Задача со стажировки ШАД по вероятности: сколько участников добежит до вершины?
Представим забег 100 человек по узкому скользкому эскалатору. У каждого есть шанс поскользнуться и упасть — тогда он и все, кто бежал за ним, соскальзывают вниз. Добираются до вершины только те, кто был впереди последнего упавшего.
Мы можем настраивать вероятность падения p. Вопрос: какое значение `p` нужно выбрать, чтобы в среднем до вершины добегало ровно 20 человек из 100?
Обозначения:
N = 100: общее количество участников.
K = 20: желаемое среднее количество участников, достигших вершины.
p: вероятность того, что один участник поскользнется и упадет (эту величину нужно найти).
q = 1 - p: вероятность того, что один участник не упадет.
X: случайная величина, равная количеству участников, достигших вершины. Мы хотим, чтобы E[X] = 20.
Логика процесса:
Участник i (где i от 1 до 100) доберется до вершины тогда и только тогда, когда ни один из участников перед ним (включая его самого) не упадет.
То есть, участники 1, 2, ..., i должны успешно пройти свой путь.
Вероятность того, что участник 1 достигнет вершины = P(участник 1 не упал) = q.
Вероятность того, что участник 2 достигнет вершины = P(участник 1 не упал И участник 2 не упал) = q * q = q^2.
Вероятность того, что участник i достигнет вершины = P(участники 1, ..., i не упали) = q^i.
Математическое ожидание E[X]:
Математическое ожидание количества добравшихся до вершины можно вычислить как сумму вероятностей того, что каждый конкретный участник доберется до вершины. Это связано со свойством линейности математического ожидания и использованием индикаторных переменных (I_i = 1, если i-й участник добрался, 0 иначе; E[X] = E[sum(I_i)] = sum(E[I_i]) = sum(P(I_i=1))).
E[X] = P(участник 1 добрался) + P(участник 2 добрался) + ... + P(участник N добрался)
E[X] = q^1 + q^2 + q^3 + ... + q^N
Это сумма первых N членов геометрической прогрессии с первым членом a = q и знаменателем r = q. Формула суммы:
S_N = a * (1 - r^N) / (1 - r)
Подставляем наши значения:
E[X] = q * (1 - q^N) / (1 - q)
Решение уравнения:
Мы хотим, чтобы E[X] = K = 20, при N = 100.
20 = q * (1 - q^100) / (1 - q)
Вспомним, что q = 1 - p. Значит, 1 - q = p.
20 = (1 - p) * (1 - (1 - p)^100) / p
20p = (1 - p) * (1 - (1 - p)^100)
Это уравнение довольно сложно решить аналитически из-за члена (1 - p)^100. Однако мы можем сделать разумное предположение.
Приближение:
Поскольку мы ожидаем, что только 20 из 100 человек доберутся до вершины, это означает, что падения должны происходить относительно часто, и вероятность того, что все 100 человек не упадут (q^100), должна быть очень мала. То есть, q^100 ≈ 0.
Если q^100 пренебрежимо мало по сравнению с 1, то формула для E[X] упрощается:
E[X] ≈ q * (1 - 0) / (1 - q)
E[X] ≈ q / (1 - q)
Теперь подставим желаемое значение E[X] = 20:
20 ≈ q / (1 - q)
20 * (1 - q) ≈ q
20 - 20q ≈ q
20 ≈ 21q
q ≈ 20 / 21
Теперь найдем p:
p = 1 - q
p ≈ 1 - (20 / 21)
p ≈ 1 / 21
Проверка приближения:
Давайте проверим, насколько мало значение q^100 при q = 20/21:
q^100 = (20/21)^100 ≈ (0.95238)^100
Используя калькулятор, (20/21)^100 ≈ 0.0076. Это действительно мало по сравнению с 1.
Посчитаем E[X] с этим приближением:
E[X] = (20/21) * (1 - (20/21)^100) / (1 - 20/21)
E[X] = (20/21) * (1 - 0.0076) / (1/21)
E[X] = 20 * (1 - 0.0076)
E[X] = 20 * 0.9924
E[X] ≈ 19.848
Это очень близко к целевому значению 20.
Ответ:
Чтобы в среднем вершины достигали 20 ребят из 100, вероятность падения p для каждого участника нужно подобрать примерно равной 1/21 (или около 0.0476).
👇 Пишите свое решение в комментариях
@machinelearning_interview
Представим забег 100 человек по узкому скользкому эскалатору. У каждого есть шанс поскользнуться и упасть — тогда он и все, кто бежал за ним, соскальзывают вниз. Добираются до вершины только те, кто был впереди последнего упавшего.
Мы можем настраивать вероятность падения p. Вопрос: какое значение `p` нужно выбрать, чтобы в среднем до вершины добегало ровно 20 человек из 100?
Обозначения:
N = 100: общее количество участников.
K = 20: желаемое среднее количество участников, достигших вершины.
p: вероятность того, что один участник поскользнется и упадет (эту величину нужно найти).
q = 1 - p: вероятность того, что один участник не упадет.
X: случайная величина, равная количеству участников, достигших вершины. Мы хотим, чтобы E[X] = 20.
Логика процесса:
Участник i (где i от 1 до 100) доберется до вершины тогда и только тогда, когда ни один из участников перед ним (включая его самого) не упадет.
То есть, участники 1, 2, ..., i должны успешно пройти свой путь.
Вероятность того, что участник 1 достигнет вершины = P(участник 1 не упал) = q.
Вероятность того, что участник 2 достигнет вершины = P(участник 1 не упал И участник 2 не упал) = q * q = q^2.
Вероятность того, что участник i достигнет вершины = P(участники 1, ..., i не упали) = q^i.
Математическое ожидание E[X]:
Математическое ожидание количества добравшихся до вершины можно вычислить как сумму вероятностей того, что каждый конкретный участник доберется до вершины. Это связано со свойством линейности математического ожидания и использованием индикаторных переменных (I_i = 1, если i-й участник добрался, 0 иначе; E[X] = E[sum(I_i)] = sum(E[I_i]) = sum(P(I_i=1))).
E[X] = P(участник 1 добрался) + P(участник 2 добрался) + ... + P(участник N добрался)
E[X] = q^1 + q^2 + q^3 + ... + q^N
Это сумма первых N членов геометрической прогрессии с первым членом a = q и знаменателем r = q. Формула суммы:
S_N = a * (1 - r^N) / (1 - r)
Подставляем наши значения:
E[X] = q * (1 - q^N) / (1 - q)
Решение уравнения:
Мы хотим, чтобы E[X] = K = 20, при N = 100.
20 = q * (1 - q^100) / (1 - q)
Вспомним, что q = 1 - p. Значит, 1 - q = p.
20 = (1 - p) * (1 - (1 - p)^100) / p
20p = (1 - p) * (1 - (1 - p)^100)
Это уравнение довольно сложно решить аналитически из-за члена (1 - p)^100. Однако мы можем сделать разумное предположение.
Приближение:
Поскольку мы ожидаем, что только 20 из 100 человек доберутся до вершины, это означает, что падения должны происходить относительно часто, и вероятность того, что все 100 человек не упадут (q^100), должна быть очень мала. То есть, q^100 ≈ 0.
Если q^100 пренебрежимо мало по сравнению с 1, то формула для E[X] упрощается:
E[X] ≈ q * (1 - 0) / (1 - q)
E[X] ≈ q / (1 - q)
Теперь подставим желаемое значение E[X] = 20:
20 ≈ q / (1 - q)
20 * (1 - q) ≈ q
20 - 20q ≈ q
20 ≈ 21q
q ≈ 20 / 21
Теперь найдем p:
p = 1 - q
p ≈ 1 - (20 / 21)
p ≈ 1 / 21
Проверка приближения:
Давайте проверим, насколько мало значение q^100 при q = 20/21:
q^100 = (20/21)^100 ≈ (0.95238)^100
Используя калькулятор, (20/21)^100 ≈ 0.0076. Это действительно мало по сравнению с 1.
Посчитаем E[X] с этим приближением:
E[X] = (20/21) * (1 - (20/21)^100) / (1 - 20/21)
E[X] = (20/21) * (1 - 0.0076) / (1/21)
E[X] = 20 * (1 - 0.0076)
E[X] = 20 * 0.9924
E[X] ≈ 19.848
Это очень близко к целевому значению 20.
Ответ:
Чтобы в среднем вершины достигали 20 ребят из 100, вероятность падения p для каждого участника нужно подобрать примерно равной 1/21 (или около 0.0476).
👇 Пишите свое решение в комментариях
@machinelearning_interview
Это полезный ресурс для улучшения работы с моделью.
В руководство включен подробный "агентный промпт" (Agentic Prompt).
Именно этот промпт OpenAI использовала для достижения рекордно высокого балла в сложном бенчмарке по разработке ПО SWE-bench Verified.
Что представляет собой этот агентный промпт?
Это, по сути, детальная инструкция для GPT-4, нацеленная на автономное решение задач по исправлению кода в репозиториях. Ключевые принципы, заложенные в нем:
- Глубокое понимание: Сначала тщательно изучить проблему.
- Исследование: Проанализировать кодовую базу.
- Планирование: Разработать четкий пошаговый план.
- Тестирование: Часто запускать тесты после каждого шага.
- Итерация: Повторять процесс до полного решения проблемы.
- Строгая верификация: Убедиться в корректности и надежности решения
- Автономность: Работать с предоставленными проектами без доступа к интернету и не завершать работу до полного решения.
Этот подход демонстрирует, как структурированные, пошаговые инструкции с акцентом на тестирование и итерацию могут значительно повысить эффективность ИИ в сложных задачах программирования.
📚 Руководство
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Что выведет следующий код на Python (модуль statistics)?
🔢 Варианты ответа:
A)
B)
C)ValueError: nan is not a valid number
D)
✅ Правильный ответ: C
💡 Почему?
- Модуль не умеет работать с .
- и вызовут или .
- В отличие от , здесь всё падает.
📌 Подвох — в в списке.
import statistics as stats
import math
data = [1, 2, 2, float('nan'), 3, 4]
print("Mean:", stats.mean(data))
print("Median:", stats.median(data))
print("Mode:", stats.mode(data))
🔢 Варианты ответа:
A)
Median: 2.5
Mode: 2
B)
Median: 2.5
Mode: 2
C)ValueError: nan is not a valid number
D)
Median: nan
Mode: 2
✅ Правильный ответ:
💡 Почему?
- Модуль
statistics
NaN
-
stats.mean()
stats.median()
StatisticsError
ValueError
- В отличие от
numpy.nanmean
📌 Подвох — в
float('nan')